// #ifndef VUE3
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
	// #endif

	// #ifdef VUE3
	import { createStore } from 'vuex'
const store = createStore({
		// #endif
		state: {
			hasLogin: false,
			isUniverifyLogin: false,
			loginProvider: "",
			openid: null,
			testvuex: false,
			colorIndex: 0,
			colorList: ['#FF0000', '#00FF00', '#0000FF'],
			noMatchLeftWindow: true,
			active: 'componentPage',
			leftWinActive: '/pages/component/view/view',
			activeOpen: '',
			menu: [],
			univerifyErrorMsg: '',
			projectForm: {},
			soundResult: {}
		},
		mutations: {
			changeParamters(state, params) {
				console.log(params, { ...state.projectForm, ...params })
				state.projectForm = { ...state.projectForm, ...params }
			},
			saveResult(state, params) {
				state.soundResult = { ...params }
			},
			login(state, provider) {
				state.hasLogin = true;
				state.loginProvider = provider;
			},
			logout(state) {
				state.hasLogin = false
				state.openid = null
			},
			setOpenid(state, openid) {
				state.openid = openid
			},
			setTestTrue(state) {
				state.testvuex = true
			},
			setTestFalse(state) {
				state.testvuex = false
			},
			setColorIndex(state, index) {
				state.colorIndex = index
			},
			setMatchLeftWindow(state, matchLeftWindow) {
				state.noMatchLeftWindow = !matchLeftWindow
			},
			setActive(state, tabPage) {
				state.active = tabPage
			},
			setLeftWinActive(state, leftWinActive) {
				state.leftWinActive = leftWinActive
			},
			setActiveOpen(state, activeOpen) {
				state.activeOpen = activeOpen
			},
			setMenu(state, menu) {
				state.menu = menu
			},
			setUniverifyLogin(state, payload) {
				typeof payload !== 'boolean' ? payload = !!payload : '';
				state.isUniverifyLogin = payload;
			},
			setUniverifyErrorMsg(state, payload = '') {
				state.univerifyErrorMsg = payload
			}
		},
		getters: {
			currentColor(state) {
				return state.colorList[state.colorIndex]
			}
		},
		actions: {
			// lazy loading openid
			getUserOpenId: async function ({
				commit,
				state
			}) {
				return await new Promise((resolve, reject) => {
					if (state.openid) {
						resolve(state.openid)
					} else {
						uni.login({
							success: (data) => {
								commit('login')
								setTimeout(function () { //模拟异步请求服务器获取 openid
									const openid = '123456789'
									console.log('uni.request mock openid[' + openid + ']');
									commit('setOpenid', openid)
									resolve(openid)
								}, 1000)
							},
							fail: (err) => {
								console.log('uni.login 接口调用失败，将无法正常使用开放接口等服务', err)
								reject(err)
							}
						})
					}
				})
			},
			getPhoneNumber: function ({
				commit
			}, univerifyInfo) {
				return new Promise((resolve, reject) => {
					uni.request({
						url: 'https://97fca9f2-41f6-449f-a35e-3f135d4c3875.bspapp.com/http/univerify-login',
						method: 'POST',
						data: univerifyInfo,
						success: (res) => {
							const data = res.data
							if (data.success) {
								resolve(data.phoneNumber)
							} else {
								reject(res)
							}

						},
						fail: (err) => {
							reject(res)
						}
					})
				})
			}
		}
	})

export default store
